/*
 * CHS.c
 *
 *  Created on: 06/10/2011
 *      Author: utn_so
 */

#include "CHS.h"

t_direccion_fisica obtener_dir_fis(uint16_t dir_logica){
	t_direccion_fisica direccion;

	direccion.cilindro = dir_logica / (configuracion.sector * configuracion.cabeza);

	direccion.cabeza = (dir_logica % (configuracion.sector * configuracion.cabeza)) / (configuracion.sector);

	direccion.sector = ((dir_logica % (configuracion.sector * configuracion.cabeza)) % (configuracion.sector));

	return direccion;
}

uint16_t tiempo_pista(uint16_t inicio, uint16_t fin) {
	t_direccion_fisica dir_inicial, dir_final;
	uint16_t ST, RT, TTotal, tiempoPosSector;
	dir_inicial = obtener_dir_fis(inicio);
	dir_final = obtener_dir_fis(fin);
	tiempoPosSector = (60000 / configuracion.rpm) / configuracion.sector;
	ST = abs(dir_inicial.cilindro - dir_final.cilindro) * configuracion.salto_pistas;
	if (dir_inicial.sector > dir_final.sector) {
		RT = (configuracion.sector - dir_inicial.sector
				+ dir_final.sector)* tiempoPosSector;
	} else {
		RT = abs(dir_inicial.sector - dir_final.sector) * tiempoPosSector;
	}
	TTotal = ST + RT + 1 /*Tiempo Transferencia*/;
	dir_inicial.sector += 1;
	return (TTotal);
}

